/**   
* @Title: SupplierController.java 
* @Package com.kerrykidz.scminvoicing.controller 
* @Description:供应商
* Copyright: Copyright (c) 2014 
* Company:wuwh team by iss
* @author: ScreenJxp   
* @date: 2014年8月13日 下午2:45:05 
* @version: V1.0
* update Release(文件修正记录)
* <pre>
* author--updateDate--description----------------------Flag————
* wuwh    2014-5-1    测试codesyle                      #wuwh001
*
*
*
* </pre>
*
*/
package com.kerrykidz.scminvoicing.controller;

import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import com.kerrykidz.common.Constants;
import com.kerrykidz.common.PrimaryKeyGenerator;
import com.kerrykidz.common.PrimaryKeyGenerator.BusinessType;
import com.kerrykidz.common.service.ICommonService;
import com.kerrykidz.dao.model.SysAttFileEntity;
import com.kerrykidz.scminvoicing.dao.model.ScmSupAgmEntity;
import com.kerrykidz.scminvoicing.dao.model.ScmSupEntity;
import com.kerrykidz.scminvoicing.dao.model.ScmSupPrdEntity;
import com.kerrykidz.scminvoicing.service.IScmInvocingSupplyService;
import com.kerrykidz.system.dao.model.SysParaEntity;
import com.kerrykidz.system.util.UserUtil;
import com.kerrykidz.system.vo.UserInfo;
import com.rdp.framework.core.controller.SpringSuperController;
import com.rdp.framework.exception.RDPException;
import com.rdp.util.GenerationUUID;
import com.rdp.util.lang.StringUtil;
import com.rdp.util.time.DateFormatUtil;
@RequestMapping("scmInvocing/supplier")
@Controller
public class SupplierController extends SpringSuperController{
		//供应商操作的service
		@Autowired
		private IScmInvocingSupplyService supplyService;
		
		//公共的service
		@Autowired
		private ICommonService commonService;
		/**
		 * 
		*
		* @Title: forwardToSupply
		* @Description: <p>跳转到供应商列表页面<p>
		* <pre>
			这里描述这个方法的使用方法 – 可选
		* </pre>
		* @param: <p>@return<p>
		* @date: 2014年8月21日
		* @return: ModelAndView
		* @throws 
		*
		 */
		@RequestMapping("/forwardToSupply")
		public ModelAndView  forwardToSupply(){
			ModelAndView mav=new ModelAndView("invoicing/invo_supplyList");
		    mav.addObject("fkBranId", UserUtil.getUserFromSession().getBranId());
			return mav;
		}
		/**
		 * 
		*
		* @Title: findSupplyInfo
		* @Description: <p>查询供应商信息<p>
		* <pre>
			这里描述这个方法的使用方法 – 可选
		* </pre>
		* @param: <p>@param entity
		* @param: <p>@param session
		* @param: <p>@return
		* @param: <p>@throws RDPException<p>
		* @date: 2014年8月21日
		* @return: ScmSupEntity
		* @throws 
		*
		 */
		@RequestMapping("/findSupplyInfo")
		@ResponseBody
		public ScmSupEntity findSupplyInfo(ScmSupEntity entity) throws RDPException{
			entity.setIspaging(true);
			String branId=UserUtil.getUserFromSession().getBranId();
			entity.setFkBranId(branId);
			List<ScmSupEntity> resultList=supplyService.findSupplyInfo(entity);
			entity.setResults(resultList);
			return entity;
		}
		/**
		 * 
		*
		* @Title: saveSupply
		* @Description: <p>保存供应商信息<p>
		* <pre>
			这里描述这个方法的使用方法 – 可选
		* </pre>
		* @param: <p>@param entity
		* @param: <p>@param session
		* @param: <p>@return
		* @param: <p>@throws RDPException<p>
		* @date: 2014年8月21日
		* @return: String
		* @throws 
		*
		 */
		@RequestMapping("/saveSupply")
		@ResponseBody
		 public  String saveSupply(ScmSupEntity entity) throws RDPException{
			UserInfo info=UserUtil.getUserFromSession();
			entity.setDelFlag("0");
			String pkSupId;
			if("".equals(entity.getPkSupId())){
				pkSupId=PrimaryKeyGenerator.getPrimaryKey(BusinessType.GY, info.getAbbrCode());
				entity.setPkSupId(pkSupId);
				entity.setFkBranId(info.getBranId());
				supplyService.saveSupply(entity);
			}else{
				pkSupId=entity.getPkSupId();
				entity.setPkSupId(pkSupId);
				supplyService.updateSupply(entity);
			}
			return pkSupId;
		}
		/**
		 * 
		*
		* @Title: deleteSupply
		* @Description: <p>删除供应商信息<p>
		* <pre>
			这里描述这个方法的使用方法 – 可选
		* </pre>
		* @param: <p>@param entity
		* @param: <p>@param session
		* @param: <p>@return
		* @param: <p>@throws RDPException<p>
		* @date: 2014年8月21日
		* @return: String
		* @throws 
		*
		 */
		@RequestMapping("/deleteSupply")
		@ResponseBody
		public  String deleteSupply(ScmSupEntity entity) throws RDPException{
			String userId=UserUtil.getUserFromSession().getUserId();
			entity.setDelFlag("1");
			entity.setModiBy(userId);
			supplyService.deleteSupply(entity);
			return "success";
		}
		/**
		 * 
		*
		* @Title: updateSupply
		* @Description: <p>修改供应商信息<p>
		* <pre>
			这里描述这个方法的使用方法 – 可选
		* </pre>
		* @param: <p>@param entity
		* @param: <p>@param session
		* @param: <p>@return
		* @param: <p>@throws RDPException<p>
		* @date: 2014年8月21日
		* @return: String
		* @throws 
		*
		 */
		@RequestMapping("/updateSupply")
		@ResponseBody
		public String  updateSupply(ScmSupEntity entity) throws RDPException{
			String userId=UserUtil.getUserFromSession().getUserId();
			entity.setModiBy(userId);
			supplyService.updateSupply(entity);
			return "success";
		}
		/**
		 * 
		*
		* @Title: forwardToAddSuply
		* @Description: <p>跳转到添加供应商信息的页面<p>
		* <pre>
			这里描述这个方法的使用方法 – 可选
		* </pre>
		* @param: <p>@param session
		* @param: <p>@return
		* @param: <p>@throws RDPException<p>
		* @date: 2014年8月21日
		* @return: ModelAndView
		* @throws 
		*
		 */
		@RequestMapping("/forwardToAddSuply")
		public ModelAndView forwardToAddSuply() throws RDPException{
			ModelAndView mv=new ModelAndView("invoicing/invo_addSupply");
			UserInfo info=UserUtil.getUserFromSession();
			String nowDate=DateFormatUtil.convertDateToStr(new Date(), "YYYY-MM-dd");
			String pkSupId=PrimaryKeyGenerator.getPrimaryKey(BusinessType.GY, info.getAbbrCode());
			Map<String, Object> map=new HashMap<String, Object>();
			map.put("branId", info.getBranId());
			map.put("branName", info.getBranName());
			map.put("nowDate", nowDate);
			map.put("userName", info.getName());
			map.put("userId", info.getUserId());
			map.put("pkSupId", pkSupId);
			mv.addObject("map", map);
			mv.addObject("fileKey", Constants.SYS_PATH_SUP_AGM);
			return mv;
		}
		/**
		 * 
		*
		* @Title: forwardToUpdateSuply
		* @Description: <p>跳转到修改供应商信息的页面<p>
		* <pre>
			这里描述这个方法的使用方法 – 可选
		* </pre>
		* @param: <p>@param entity
		* @param: <p>@param session
		* @param: <p>@return
		* @param: <p>@throws RDPException<p>
		* @date: 2014年8月21日
		* @return: ModelAndView
		* @throws 
		*
		 */
		@RequestMapping("/forwardToUpdateSuply")
		public ModelAndView forwardToUpdateSuply(ScmSupEntity entity) throws RDPException{
				String branId=UserUtil.getUserFromSession().getBranId();
				entity.setFkBranId(branId);
				ModelAndView mv=new ModelAndView();
				mv.setViewName(entity.getPassed()==1?"invoicing/invo_updateSupply":"invoicing/invo_readSupply");
				List<ScmSupEntity> resultList=supplyService.findSupplyInfo(entity);
				entity=resultList!=null?resultList.get(0):entity;
				mv.addObject("entity", entity);
				mv.addObject("fileKey", Constants.SYS_PATH_SUP_AGM);
				return mv;
		}
		/**
		 * @throws ParseException 
		 * 
		*
		* @Title: saveSupAgm
		* @Description: <p>保存供应商协议信息<p>
		* <pre>
			这里描述这个方法的使用方法 – 可选
		* </pre> 
		* @param: <p>@param entity
		* @param: <p>@param session
		* @param: <p>@return
		* @param: <p>@throws RDPException<p>
		* @date: 2014年8月22日
		* @return: String
		* @throws 
		*
		 */
		@RequestMapping("/saveSupAgm")
		@ResponseBody
		public String saveSupAgm(ScmSupAgmEntity entity) throws RDPException, ParseException{
				/**
				 * 预先保存供应商信息
				 */
				UserInfo info=UserUtil.getUserFromSession();
				ScmSupEntity supEntity=new ScmSupEntity();
				String isFirst=entity.getIsFirst();
				String pkSupId;
				if("".equals(isFirst)){
					pkSupId=PrimaryKeyGenerator.getPrimaryKey(BusinessType.GY, info.getAbbrCode());
					supEntity.setPkSupId(pkSupId);
					supEntity.setDelFlag("1");
					supEntity.setFkBranId(info.getBranId());
					supplyService.saveSupply(supEntity);
				}else{
					pkSupId=entity.getIsFirst();
				}
				String pkSupagmId=GenerationUUID.getGenerationUUID();
				entity.setFkSupId(pkSupId);
				entity.setDelFlag("0");
				entity.setModiBy(info.getUserId());
				entity.setFkBranId(info.getBranId());
				entity.setPkSupagmId(pkSupagmId);
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				String startTime = entity.getStartTime();
				String endTime = entity.getEndTime();
				if(StringUtil.isNotBlank(startTime))
				{
					entity.setAgmFrom(sdf.parse(startTime + " 00:00:00"));
				}
				if(StringUtil.isNotBlank(endTime))
				{
					entity.setAgmTo(sdf.parse(endTime + " 23:59:59"));
				}
				supplyService.saveSupAgm(entity);
				return pkSupId;
		}
		//@RequestMapping
		
		/**
		 * @throws RDPException 
		 * 
		*
		* @Title: getSupAgmInfo
		* @Description: <p>得到与供应商签订的协议信息<p>
		* <pre>
			这里描述这个方法的使用方法 – 可选
		* </pre>
		* @param: <p>@return<p>
		* @date: 2014年8月22日
		* @return: ScmSupAgmEntity
		* @throws 
		*
		 */
		@RequestMapping("/getSupAgmInfo")
		@ResponseBody
		public ScmSupAgmEntity getSupAgmInfo(ScmSupAgmEntity entity) throws RDPException{
			entity.setIspaging(true);
			entity.setFkBranId(UserUtil.getUserFromSession().getBranId());
			 List<ScmSupAgmEntity> resultList=supplyService.getSupAgmInfo(entity);
			entity.setResults(resultList);
			 return entity;
		}
		
		@RequestMapping("/deleteBefore")
		@ResponseBody
		public String deleteBefore(String fkSupId) throws RDPException{
			return supplyService.deleteBefore(fkSupId);
		}
		/**
		 * 上传协议
		 * @param file
		 * @return
		 * @date: 2014年10月9日
		 */
		@RequestMapping("/uploadImage")
		@ResponseBody
		public String uploadImage(@RequestParam(value = "file", required = false) MultipartFile file) {
			UserInfo userInfo = UserUtil.getUserFromSession();
			if (null == userInfo) {
				return null;
			}
			SysParaEntity para = commonService.findSysParaById(Constants.SYS_PATH_SUP_AGM);
			String fileName = file.getOriginalFilename();
			int index = fileName.lastIndexOf(".");
			String newFileName = System.currentTimeMillis() + (index > -1 ? fileName.substring(index) : "");
			File targetFile = new File(para.getParaValue(), newFileName);
			String realName=targetFile.getPath();
			if (!targetFile.exists()) {
				targetFile.mkdirs(); 
			}
			// 保存
			try {
				file.transferTo(targetFile);
			} catch (Exception e) {
				e.printStackTrace();
				return "";
			}
			return realName;
		}
		/** 
		 * @throws RDPException 
		 * 
		*
		* @Title: deleteSupAgm
		* @Description: <p>删除协议操作<p>
		* <pre>
			这里描述这个方法的使用方法 – 可选
		* </pre>
		* @param: <p>@param pkSupId
		* @param: <p>@param session
		* @param: <p>@return<p>
		* @date: 2014年8月25日
		* @return: String
		* @throws 
		*
		 */
		@RequestMapping("/deleteSupAgm")
		@ResponseBody
		public String deleteSupAgm(ScmSupAgmEntity entity) throws RDPException{
				String userId=UserUtil.getUserFromSession().getUserId();
				entity.setModiBy(userId);
				supplyService.deleteSupAgm(entity);
				return "success";
		}
		/**
		 * 根据协议查询协议中的商品信息
		 * @param fkSupagmId
		 * @return
		 * @throws RDPException 
		 * @date: 2014年9月10日
		 */
		@RequestMapping("/getAgmProductInfo")
		@ResponseBody
		public List<ScmSupPrdEntity>  getAgmProductInfo(String fkSupagmId) throws RDPException{
			return supplyService.getAgmProductInfo(fkSupagmId);
		}
		@RequestMapping("/deleteSupPrd")
		@ResponseBody
		public String deleteSupPrd(ScmSupPrdEntity entity) throws RDPException{
				   supplyService.deleteSupPrd(entity);
                   return Constants.SUCCESS;
		}
		/**
		 * 修改协议中的商品
		 * @param entity
		 * @return
		 * @throws RDPException 
		 * @date: 2014年9月14日
		 */
		@RequestMapping("/updateAgmPrdouct")
		@ResponseBody
		public String  updateAgmPrdouct(ScmSupAgmEntity entity) throws RDPException{
			//修改协议本身的信息 
			supplyService.updateSupAgm(entity);
			//修改协议的商品信息
			supplyService.updatePrice(entity.getUpdateInfo(),entity.getPkSupagmId());
			//保存商品价格信息
			supplyService.savePrdPrice(entity.getAddInfo(),entity.getPkSupagmId());
			return Constants.SUCCESS;
		}
		/**
		 * 修改协议的附件
		 * @return
		 * @throws RDPException 
		 * @date: 2014年10月10日
		 */
		@RequestMapping("/updateAgmFile")
		@ResponseBody
		public String updateAgmFile(@RequestParam("pkAgmFile")String pkAgmFile,@RequestParam("fileName") String  fileName) throws RDPException{
			SysAttFileEntity entity=new SysAttFileEntity();
			fileName=fileName.substring(fileName.lastIndexOf("\\")+1);
 		entity.setAttfileName(fileName);
			entity.setPkAttfileId(pkAgmFile);
			commonService.updateAttFile(entity);
			return fileName;
		}
		/**
		 * 删除协议或协议中的商品时判断是否可以删除
		 * @param fkAgmId
		 * @param fkPrdId
		 * @return
		 * @throws RDPException
		 * @date: 2014年10月11日
		 */
		@RequestMapping("/isDelete")
		@ResponseBody
		public  String  isDelete(@RequestParam("fkAgmId")String fkAgmId,@RequestParam("fkPrdId")String fkPrdId) throws RDPException{
			return  supplyService.isDelete(fkAgmId, fkPrdId);
		}
		
}


